IF exists(SELECT * FROM dbo.sysobjects WHERE name='vulHulpAfwezigen' AND xtype='P') 
BEGIN
	DROP PROCEDURE vulHulpAfwezigen
END
GO

CREATE     procedure vulHulpAfwezigen @klasnaam varchar(5), 
				@maandNr int
as

set nocount on

/*
De procedure maakt de tabel 'hulpAfwezigen' leeg.
Daarna worden de leerlingen uit de gekozen klas en de  kalendergegevens uit de gekozen maand in de tabel geplaatst. 
De leerlingen worden allen als aanwezig aangeduid.
De gegevens uit de tabel 'afwezigheden' worden tenslotte over deze
default-gegevens geschreven.
Uiteindelijk wordt de vermelding van speciale dagen opgenomen.
*/

--De oude gegevens uit de hulptabel worden gewist.

  delete hulpAfwezigen
  
  --De kalendergegevens worden overgebracht
  
  declare @veelStreepjes varchar(500)
  declare @dagnamen varchar(500)
  declare @voormiddag char(1)
  declare @namiddag char(1)
  declare @teller  int
  declare @sqlZin varchar(2000) 
  declare @datumAanduiding varchar(20) 
  declare @deDatum datetime

  declare kalender cursor for
    select voormiddag,namiddag,datum from kalender 
           where datepart(month,datum)= @maandNr
           order by datum asc
  open kalender
  
  set @veelStreepjes = ' '
  fetch next from kalender into @voormiddag,@namiddag,@deDatum
  exec naamMaandJaar @datum=@deDatum, @naam = @datumAanduiding output

  set @veelStreepjes = @veelStreepjes + '''' + convert(varchar(30),@deDatum) + ''''
  set @teller=1
  while @@fetch_status = 0
    begin  
	if (@voormiddag = 'X') 
      	  set @veelStreepjes = @veelStreepjes + ',''X'''
  	Else
      	  set @veelStreepjes = @veelStreepjes + ',''|'''
  
  	If (@namiddag = 'X') 
      	  set @veelStreepjes = @veelStreepjes + ',''X'''
  	Else
      	  set @veelStreepjes = @veelStreepjes + ',''|'''
  	fetch next from kalender into @voormiddag,@namiddag,@deDatum
	set @teller = @teller + 1
     end
  deAllocate kalender
  while @teller < 32
    begin
        set @veelStreepjes = @veelStreepjes + ', NULL, NULL'
	set @teller = @teller + 1
    end
  
  --De veldnamen worden opgebouwd
  
  set @dagNamen = 'v1,n1'
  set @teller = 2
  while @teller < 32
    begin
      set @dagNamen = @dagNamen + ',v' + convert(varchar(2),@teller) + ',n' + convert(varchar(2),@teller)
      set @teller = @teller + 1
    end

  --De kalendergegevens en default-streepjes worden voor elke leerling van de geselecteerde klas ingebracht

  set @sqlzin = 'insert into hulpAfwezigen(inschrijvingsNr,deNaam,maand,datumAanduiding,startDatum,' 
        + @dagNamen + ') ' 
        + 'select l.inschrijvingsNr,l.achternaam + '' ''  + l.voornaam,'
	+ convert(char(2),@maandNr) + ',''' + @datumAanduiding
	+ ''', ' + @veelStreepjes
        + ' from Leerlingen as l ' 
    	+ ' where l.klas like ''' + @klasNaam + ''''
  --print @sqlzin
  execute(@sqlZin)

-- De afwezigheden worden ingevoerd uit de tabel 'afwezigheden'
  declare @inschrijvingsNr varchar(7)
  declare @datum dateTime
  declare @dagdeel char(1)
  declare @reden char(1)
  declare @deDag varchar(2)
  set @sqlZin = ''
  
  declare deAfwezigen cursor for
    select a.inschrijvingsNr, a.datum, a.dagdeel, a.reden 
    from afwezigheden as a left join leerlingen as l
       	on l.inschrijvingsNr = a.inschrijvingsNr
    where (l.klas like @klasNaam )
    and (datepart(month,a.datum) = @maandNr)
  open deAfwezigen

  fetch next from deAfwezigen into @inschrijvingsNr,@datum,@dagdeel,@reden
  while (@@fetch_status = 0)
  begin 
    set @deDag = convert(varchar(2),datePart(day,@datum))
    If @dagdeel = 'G' 
      begin
        set @sqlZin = 'update hulpAfwezigen ' +
            'set v' + @deDag + '=''' + @reden + ''',n' + @deDag 
	  + '=''' + @reden + ''' where inschrijvingsNr = ' + @inschrijvingsNr
      end
    If @dagdeel = 'V' Or @dagdeel = 'N'
      begin
        set @sqlZin = 'update hulpAfwezigen ' + 
            'set ' + @dagdeel + @deDag + '=''' + @reden +
  	    ''' where inschrijvingsNr = ' + @inschrijvingsNr
      end	
    execute(@sqlZin)
    fetch next from deAfwezigen into @inschrijvingsNr,@datum,@dagdeel,@reden
  end
  deallocate deAfwezigen

-------------------------------------------
-- Aanvullen speciale dagen
-------------------------------------------
  declare @startdatum datetime

  select @startDatum = min(datum) from kalender 
	where datepart(month,datum)= @maandNr

  delete from hulpAfwezigenSpecialeDagen
  declare @klas varchar(5)
  declare deKlassen cursor for
    select distinct klas from leerlingen
    where klas like @klasNaam 

  open deKlassen

  fetch next from deKlassen into @klas
  while (@@fetch_status = 0)
  begin
    insert hulpafwezigenSpecialeDagen(klasNaam,deNaam)
    values (@klas,'Speciale dagen')
    declare @i int
    declare @volgStr varchar(3)
    declare @volgDatum dateTime
    set @volgDatum = @startDatum

    set @i=0
    while @i < 31
      begin
        set @volgStr = convert(varchar(3),@i + 1)
--        print @volgdatum
        if dbo.afwezigenIsSpecialeDag(@klas,@volgDatum) = 1 
        begin
  	  set @sqlZin = 'update hulpafwezigenSpecialedagen ' 
	  + 'set n' + @volgStr + '=''@'', v' + @volgstr 
	  + '=''@'' where deNaam = ''Speciale dagen'' and klasNaam = ''' + @klas + ''''
          execute(@sqlZin)
          print @sqlZin
	end
        set @i = @i + 1
        set @volgDatum = dateAdd(dd,1,@volgDatum)
      end
  fetch next from deKlassen into @klas
 end
close deKlassen
deallocate deKlassen